#!/usr/bin/env python2.6
# -*- coding:utf-8 -*-

import pygame
from pygame.locals import *
import os, sys, getopt

images_dir = os.path.join( "..", "imagens" ) # Recebera a imagem do fundo

class Fundo:
    """
    Fundo do Game
    """
    image = None
    
    def __init__(self):
        ''' Bloco Construtor '''
        screen = pygame.display.get_surface()
        back = pygame.Surface(screen.get_size()).convert() # Converte a imagens de mameira que fiquem menos densas
        back.fill((0, 0, 0)) # Define a cor da tela.. RGB, o caso preta
        self.image = back
    # __init__()

    def draw(self, screen):
        ''' Desenha a tela '''
        screen.blit(self.image, (0, 0))

    def update(self, dt):
        ''' Atualiza o jogo'''
        pass # Ainda não faz nada
# Fundo

class Game:
    screen = None
    screen_size = None
    run = True
    fundo  = None    
    
    def __init__(self, size, fullscreen):
        """
        Aqui iniciamos o pygame, a resolução da tela, caption, e por enquanto desativa o mouse
        """
        actors = {}
        pygame.init()
        flags = DOUBLEBUF
        if fullscreen:
            flags |= FULLSCREEN
        self.screen = pygame.display.set_mode(size, flags)
        self.screen_size = self.screen.get_size()

        pygame.mouse.set_visible(0) # Deixa o mouse invisivel
        
        pygame.display.set_caption("Foo Fighter v0.1") # Titulo

    def handle_events(self):
        """
        Trata os eventos e toma as ações
        """
        for event in pygame.event.get():
            t = event.type
            if t in (KEYDOWN, KEYUP):
                k = event.key
        
            if t == QUIT:
                self.run = False

            elif t == KEYDOWN:
                if   k == K_ESCAPE:
                    self.run = False


    def actors_update(self, dt):
        self.fundo.update( dt )

    def actors_draw(self):
        self.fundo.draw(self.screen)

   
    def loop(self):
        """
        Laço principal
        """
        # Criamos o fundo
        self.fundo = Fundo()

        # Relogio e o dt que vai limitar o valor de FPS
        clock = pygame.time.Clock()
        dt = 16

        # Inicia loop principal
        while self.run:
            clock.tick(1000 / dt)

            # Handle Input Events
            self.handle_events()

            self.actors_update( dt )

            self.actors_draw()
            
            pygame.display.flip()

# Game

def parse_opts(argv):
    """
    Retorna as informações da linha de comando
    """
    # Analise a linha de commando usando 'getopt'
    try:
        opts, args = getopt.gnu_getopt( argv[ 1 : ],
                                        "hfr:",
                                        [ "help",
                                          "fullscreen",
                                          "resolution=" ] )
    except getopt.GetoptError:
        # Informaçao
        usage()
        sys.exit(2)

    options = {
        "fullscreen":  False,
        "resolution": (640, 480),
        }

    for b, m in opts:
        if b in ( "-f", "--fullscreen" ):
            options[ "fullscreen" ] = True
        elif b in ( "-h", "--help" ):
            usage()
            sys.exit( 0 )
        elif b in ( "-r", "--resolution" ):
            m = m.lower()
            r = m.split( "x" )
            if len( r ) == 2:
                options[ "resolution" ] = r
                continue

            r = m.split( "," )
            if len( r ) == 2:
                options[ "resolution" ] = r
                continue

            r = m.split( ":" )
            if len( r ) == 2:
                options[ "resolution" ] = r
                continue
    # for b, m in opts
    
    r = options[ "resolution" ]
    options[ "resolution" ] = [ int( r[ 0 ] ), int( r[ 1 ] ) ]
    return options
# parse_opts()

def main(argv):
    ''' Primeiro vamos verificar que estamos no diretorio certo para conseguir encontrar as imagens e outros recursos, e inicializar o pygame com as
    opcoes passadas pela linha de comando
    '''
    fullpath = os.path.abspath( argv[ 0 ] )
    dir = os.path.dirname( fullpath )
    os.chdir( dir )

    options = parse_opts(argv)
    game = Game( options[ "resolution" ], options[ "fullscreen" ] )
    game.loop()
# main()
        
# Aqui executamos tudo
if __name__ == '__main__':
    main(sys.argv)
